{
  "name": "cncjs",
  "version": "1.10.3",
  "description": "A web-based interface for CNC milling controller running Grbl, Marlin, Smoothieware, or TinyG",
  "homepage": "https://github.com/cncjs/cncjs",
  "author": "Cheton Wu <cheton@gmail.com>",
  "main": "./dist/cncjs/server-cli.js",
  "bin": {
    "cnc": "./bin/cnc",
    "cncjs": "./bin/cncjs"
  },
  "files": [
    "bin",
    "dist",
    "static"
  ],
  "repository": {
    "type": "git",
    "url": "git@github.com:cncjs/cncjs.git"
  },
  "license": "MIT",
  "engines": {
    "node": ">=14"
  },
  "preferGlobal": true,
  "scripts": {
    "build": "yarn run build-prod",
    "build-latest": "bash scripts/build-latest.sh",
    "build-dev": "bash scripts/build-dev.sh",
    "build-prod": "bash scripts/build-prod.sh",
    "clean": "del dist output",
    "electron": "electron",
    "electron-builder": "electron-builder",
    "electron-builder:debug": "cross-env DEBUG=electron-builder electron-builder",
    "electron-rebuild": "electron-rebuild",
    "github-release": "github-release",
    "package-sync": "node scripts/package-sync.js",
    "build:macos": "bash -c 'scripts/electron-builder.sh --macos --x64 --arm64'",
    "build:macos-x64": "bash -c 'scripts/electron-builder.sh --macos --x64'",
    "build:macos-arm64": "bash -c 'scripts/electron-builder.sh --macos --arm64'",
    "build:linux": "bash -c 'scripts/electron-builder.sh --linux --x64 --arm64 --armv7l'",
    "build:linux-x64": "bash -c 'scripts/electron-builder.sh --linux --x64'",
    "build:linux-armv7l": "bash -c 'scripts/electron-builder.sh --linux --armv7l'",
    "build:linux-arm64": "bash -c 'scripts/electron-builder.sh --linux --arm64'",
    "build:windows": "bash -c 'scripts/electron-builder.sh --windows --x64'",
    "build:windows-x64": "bash -c 'scripts/electron-builder.sh --windows --x64'",
    "start-electron": "electron ./dist/cncjs/main",
    "start-prod": "yarn run build-prod && NODE_ENV=production ./bin/cncjs",
    "dev": "yarn run build-dev && concurrently --names \"start-app-dev,start-server-dev\" \"yarn run start-app-dev\" \"yarn run start-server-dev\"",
    "start-app-dev": "cross-env NODE_ENV=development webpack serve --config webpack.config.development.js --inline --content-base output/cncjs/app",
    "start-server-dev": "cross-env NODE_ENV=development ./bin/cncjs --port 8000 -m /widget:https://cncjs.github.io/cncjs-widget-boilerplate/v1/",
    "lint": "concurrently --kill-others-on-fail --names \"i18nlint,eslint,stylint\" \"yarn run i18nlint\" \"yarn run eslint\" \"yarn run stylint\"",
    "eslint": "eslint --color --ext .js --ext .jsx *.js src scripts test",
    "eslint-debug": "DEBUG=\"eslint:glob-util,eslint:config-*,eslint:cli*\" eslint --cache --color --quiet --ext .js --ext .jsx *.js src scripts test",
    "i18nlint": "bash -c 'find src/{app,server}/i18n -type f -name \"*.json\" | xargs -L1 -I{} -- bash -c \"echo Linting {}; jsonlint -q {}\"'",
    "stylint": "stylint src/app",
    "test": "tap test/*.js --no-timeout --node-arg=--require --node-arg=@babel/register --node-arg=--require --node-arg=@babel/polyfill",
    "coveralls": "tap test/*.js --coverage --coverage-report=text-lcov --nyc-arg=--require --nyc-arg=@babel/register --nyc-arg=--require --nyc-arg=@babel/polyfill",
    "postinstall": "opencollective postinstall"
  },
  "build": {
    "appId": "org.cncjs",
    "asar": false,
    "asarUnpack": [],
    "productName": "CNCjs",
    "directories": {
      "buildResources": "electron-build",
      "output": "output",
      "app": "dist/cncjs"
    },
    "publish": [],
    "mac": {
      "category": "public.app-category.productivity",
      "target": [
        "dmg"
      ],
      "icon": "electron-build/icon.icns"
    },
    "dmg": {
      "background": "electron-build/background.png",
      "icon": "electron-build/icon.icns",
      "iconSize": 80,
      "iconTextSize": 12,
      "contents": [
        {
          "x": 448,
          "y": 344,
          "type": "link",
          "path": "/Applications"
        },
        {
          "x": 192,
          "y": 344,
          "type": "file"
        }
      ]
    },
    "win": {
      "target": [
        "nsis"
      ],
      "icon": "electron-build/icon.ico"
    },
    "linux": {
      "category": "Utility",
      "target": [
        "AppImage",
        "deb",
        "rpm"
      ]
    }
  },
  "keywords": [
    "cncjs",
    "arduino",
    "raspberry",
    "pi",
    "cnc",
    "gcode",
    "grbl",
    "smoothie",
    "smoothieware",
    "tinyg",
    "g2core",
    "react",
    "socket.io"
  ],
  "dependencies": {
    "@babel/polyfill": "~7.4.3",
    "@babel/runtime": "~7.4.3",
    "@serialport/parser-readline": "^10.0.0",
    "@trendmicro/react-anchor": "~0.5.6",
    "@trendmicro/react-breadcrumbs": "~0.5.5",
    "@trendmicro/react-buttons": "~1.3.1",
    "@trendmicro/react-checkbox": "~3.4.1",
    "@trendmicro/react-datepicker": "~1.0.0-alpha.6",
    "@trendmicro/react-dropdown": "~1.3.0",
    "@trendmicro/react-form-control": "~0.1.0",
    "@trendmicro/react-grid-system": "~0.2.0",
    "@trendmicro/react-iframe": "~0.3.1",
    "@trendmicro/react-interpolate": "~0.5.5",
    "@trendmicro/react-loader": "~0.6.1",
    "@trendmicro/react-modal": "~2.2.2",
    "@trendmicro/react-navs": "~0.11.6",
    "@trendmicro/react-notifications": "~1.0.1",
    "@trendmicro/react-paginations": "~0.6.1",
    "@trendmicro/react-popover": "~0.4.0",
    "@trendmicro/react-portal": "~0.4.3",
    "@trendmicro/react-radio": "~3.2.2",
    "@trendmicro/react-table": "~1.0.1-alpha.2",
    "@trendmicro/react-toggle-switch": "~0.5.7",
    "@trendmicro/react-tooltip": "~0.6.0",
    "@trendmicro/react-validation": "~0.1.0",
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "~1.18.3",
    "bootstrap": "~3.3.7",
    "chained-function": "~0.5.0",
    "chalk": "~2.4.2",
    "classnames": "~2.2.6",
    "cli-color": "~1.4.0",
    "cncjs-controller": "~1.3.0",
    "colornames": "~1.1.1",
    "commander": "~9.1.0",
    "compression": "~1.7.4",
    "connect-multiparty": "~2.2.0",
    "connect-restreamer": "~1.0.3",
    "consolidate": "~0.15.1",
    "cookie-parser": "~1.4.4",
    "core-js": "~3.26.1",
    "debug": "~4.1.1",
    "deep-keys": "~0.5.0",
    "detect-browser": "~4.4.0",
    "electron-store": "~8.1.0",
    "ensure-array": "~1.0.0",
    "ensure-type": "~1.5.1",
    "errorhandler": "~1.5.0",
    "es5-shim": "~4.5.13",
    "escodegen": "~1.11.1",
    "esprima": "~4.0.1",
    "expand-tilde": "~2.0.2",
    "expr-eval": "~1.2.2",
    "express": "~4.16.4",
    "express-jwt": "~5.3.1",
    "express-session": "~1.16.1",
    "final-form": "~4.12.0",
    "font-awesome": "~4.7.0",
    "frac": "~1.1.2",
    "gcode-interpreter": "~2.1.0",
    "gcode-parser": "~1.3.6",
    "gcode-toolpath": "~2.2.0",
    "history": "~4.9.0",
    "hogan.js": "~3.0.2",
    "http-proxy": "~1.18.1",
    "i18next": "~15.0.9",
    "i18next-browser-languagedetector": "~3.0.1",
    "i18next-express-middleware": "~1.8.0",
    "i18next-node-fs-backend": "~2.1.3",
    "i18next-xhr-backend": "~2.0.1",
    "infinite-tree": "~1.16.2",
    "is-electron": "~2.2.1",
    "jimp": "^0.10.3",
    "js-polyfills": "~0.1.42",
    "jsonwebtoken": "~9.0.0",
    "jsuri": "~1.3.1",
    "keycode": "~2.2.0",
    "lodash": "~4.17.11",
    "memoize-one": "~5.0.4",
    "method-override": "~3.0.0",
    "minimatch": "~3.0.4",
    "mkdirp": "~0.5.1",
    "moment": "~2.24.0",
    "morgan": "~1.9.1",
    "mousetrap": "~1.6.3",
    "namespace-constants": "~0.5.0",
    "normalize.css": "~8.0.1",
    "opencollective": "~1.0.3",
    "perfect-scrollbar": "~1.4.0",
    "prop-types": "~15.7.2",
    "pubsub-js": "~1.7.0",
    "push.js": "~1.0.9",
    "qs": "~6.7.0",
    "range_check": "~1.4.0",
    "rc-slider": "~8.6.9",
    "react": "~15.6.2",
    "react-bootstrap": "~0.32.1",
    "react-dom": "~15.6.2",
    "react-dropzone": "~4.2.13",
    "react-facebook-loading": "~0.6.2",
    "react-final-form": "~3.7.0",
    "react-foreach": "~0.1.1",
    "react-ga": "~2.5.7",
    "react-i18next": "~10.7.0",
    "react-icon-base": "~2.1.2",
    "react-infinite-tree": "~0.7.1",
    "react-redux": "~5.0.7",
    "react-repeatable": "~1.1.1",
    "react-router": "~4.3.1",
    "react-router-dom": "~4.3.1",
    "react-router-redux": "~5.0.0-alpha.6",
    "react-select": "~1.2.1",
    "react-sortablejs": "~1.5.1",
    "react-tiny-virtual-list": "~2.2.0",
    "react-toggle": "~4.0.2",
    "recompose": "~0.30.0",
    "redux": "~4.0.1",
    "regenerator-runtime": "~0.13.10",
    "registry-auth-token": "~3.4.0",
    "registry-url": "~5.1.0",
    "rimraf": "~2.6.3",
    "semver": "~6.0.0",
    "serialport": "^10.0.0",
    "serve-favicon": "~2.5.0",
    "serve-static": "~1.13.2",
    "session-file-store": "~1.2.0",
    "sha1": "~1.1.1",
    "shortid": "~2.2.14",
    "socket.io": "~2.2.0",
    "socket.io-client": "~2.2.0",
    "socketio-jwt": "~4.5.0",
    "sortablejs": "~1.9.0",
    "spawn-default-shell": "~2.0.0",
    "styled-components": "~3.4.9",
    "superagent": "~3.8.3",
    "superagent-use": "~0.1.0",
    "three": "~0.103.0",
    "universal-logger": "~1.0.1",
    "universal-logger-browser": "~1.0.2",
    "uuid": "~3.3.2",
    "watch": "~1.0.2",
    "webappengine": "~1.2.0",
    "winston": "~3.2.1",
    "xterm": "~3.0.2"
  },
  "devDependencies": {
    "@babel/cli": "~7.4.3",
    "@babel/core": "~7.4.3",
    "@babel/node": "~7.2.2",
    "@babel/polyfill": "~7.4.3",
    "@babel/preset-env": "~7.4.3",
    "@babel/preset-react": "~7.0.0",
    "@babel/register": "~7.4.0",
    "@trendmicro/babel-config": "~1.0.2",
    "babel-core": "~7.0.0-bridge.0",
    "babel-eslint": "~10.0.1",
    "babel-loader": "~8.0.5",
    "babel-plugin-lodash": "~3.3.4",
    "boolean": "~1.0.0",
    "bundle-loader": "~0.5.6",
    "concurrently": "~4.1.0",
    "coveralls": "~3.0.3",
    "cross-env": "~5.2.0",
    "css-loader": "~2.1.1",
    "css-split-webpack-plugin": "~0.2.6",
    "del-cli": "~3.0.1",
    "dotenv": "~7.0.0",
    "electron": "~22.0.3",
    "electron-builder": "~23.6.0",
    "electron-rebuild": "~3.2.7",
    "eslint": "~5.16.0",
    "eslint-config-trendmicro": "~1.4.1",
    "eslint-import-resolver-webpack": "~0.11.1",
    "eslint-loader": "~2.1.2",
    "eslint-plugin-import": "~2.17.2",
    "eslint-plugin-jsx-a11y": "~6.2.1",
    "eslint-plugin-react": "~7.12.4",
    "eventsource-polyfill": "~0.9.6",
    "file-loader": "~3.0.1",
    "find-imports": "~1.1.0",
    "github-release-cli": "~2.0.0",
    "glob": "~7.1.3",
    "html-webpack-plugin": "~3.2.0",
    "i18next-scanner": "~2.10.1",
    "imports-loader": "~0.8.0",
    "json-loader": "~0.5.7",
    "jsonlint": "^1.6.3",
    "mini-css-extract-plugin": "~0.6.0",
    "nib": "~1.1.2",
    "optimize-css-assets-webpack-plugin": "~5.0.1",
    "pre-push": "~0.1.1",
    "progress": "~2.0.3",
    "react-hot-loader": "~4.8.4",
    "redux-devtools": "~3.5.0",
    "run-sequence": "~2.2.1",
    "style-loader": "~0.23.1",
    "stylint": "~1.5.9",
    "stylint-loader": "~1.0.0",
    "stylus": "~0.54.5",
    "stylus-loader": "~3.0.2",
    "tap": "~12.6.2",
    "terser-webpack-plugin": "~1.2.3",
    "text-table": "~0.2.0",
    "transform-loader": "~0.2.4",
    "url-loader": "~1.1.2",
    "webpack": "~4.30.0",
    "webpack-cli": "~3.3.1",
    "webpack-dev-middleware": "~3.6.2",
    "webpack-dev-server": "~3.3.1",
    "webpack-hot-middleware": "~2.24.3",
    "webpack-manifest-plugin": "~2.0.4",
    "webpack-node-externals": "~1.7.2",
    "write-file-webpack-plugin": "~4.5.0"
  },
  "pre-push": [
    "eslint-debug"
  ],
  "collective": {
    "type": "opencollective",
    "url": "https://opencollective.com/cncjs"
  },
  "tap": {
    "check-coverage": true,
    "lines": 80,
    "functions": 60,
    "branches": 60,
    "statements": 80
  }
}
